Skipgram

从输入语句中生成skip-gram。skip-gram是从句子中提取的词语序列,其中相邻词语之间的距离(跳过的词语数量)不超过指定的最大值。此算子主要用于自然语言处理(NLP)任务。

输入:
  • sentence - StringPack* 类型,指向输入语句的指针。

  • words - StringPack* 类型,用于存储从语句中解析出的词语的工作空间。

  • ngram_size - int 类型,指定每个n-gram中的词语数量。

  • max_skip_size - int 类型,指定在构成n-gram时可以跳过的最大词语数量。

  • include_all_ngrams - int 类型,布尔标志。如果为非零,则生成长度从1到 ngram_size 的所有n-gram;否则,仅生成长度为 ngram_size 的n-gram。

  • grams - StringPack** 类型,用于存储生成的gram的工作空间。

  • grams_word_count - int* 类型,用于存储每个gram中词语数量的工作空间。

  • stack - int* 类型,长度为 ngram_size 的临时工作空间。

  • blank - char* 类型,指向空格字符的指针,用于连接gram中的词语。

  • output_tensor - char* 类型,最终输出张量的数据地址。

  • offset - int* 类型,输出参数,用于存储 output_tensor 中每个gram的偏移量。

  • len - int* 类型,输出参数,用于存储 output_tensor 中每个gram的长度。

  • shape - int* 类型,输出参数,用于存储输出张量的维度信息。

  • core_mask - (仅限共享版本) 核掩码。

输出:
  • output_tensoroffsetlenshape - 这些指针指向的内存区域将被填充,以表示包含生成结果的最终张量。

支持平台:

FT78NE MT7004

备注

  • 该算子不区分数据类型,直接操作字符数据。

共享存储版本:

int skipgram_s(StringPack *sentence, StringPack *words, int ngram_size, int max_skip_size, int include_all_ngrams, StringPack **grams, int *grams_word_count, int *stack, char *blank, char *output_tensor, int *offset, int *len, int *shape, int core_mask)

C调用示例:

 1#include <stdio.h>
 2#include "skipgram.h" // 假设头文件名
 3
 4typedef struct StringPack {
 5  long long len;
 6  char *data;
 7} StringPack;
 8
 9int main(int argc, char* argv[]) {
10    // 假设输入和工作空间已在DDR中分配
11    StringPack* sentence = (StringPack*)0xA0000000;
12    StringPack* words = (StringPack*)0xA0010000;
13    StringPack** grams = (StringPack**)0xA0020000;
14    int* grams_word_count = (int*)0xA0030000;
15    int* stack = (int*)0xA0040000;
16    char* output_tensor = (char*)0xB0000000;
17    int* offset = (int*)0xB0010000;
18    int* len = (int*)0xB0020000;
19    int* shape = (int*)0xB0030000;
20    char blank_char = ' ';
21
22    // 填充sentence内容
23    sentence->data = "mindspore signal processing library";
24    sentence->len = 33;
25
26    int ngram_size = 2;
27    int max_skip_size = 1;
28    int include_all_ngrams = 1;
29    int core_mask = 0xff;
30
31    skipgram_s(sentence, words, ngram_size, max_skip_size, include_all_ngrams,
32               grams, grams_word_count, stack, &blank_char,
33               output_tensor, offset, len, shape, core_mask);
34    return 0;
35}

私有存储版本:

int skipgram_p(StringPack *sentence, StringPack *words, int ngram_size, int max_skip_size, int include_all_ngrams, StringPack **grams, int *grams_word_count, int *stack, char *blank, char *output_tensor, int *offset, int *len, int *shape)

C调用示例:

 1#include <stdio.h>
 2#include "skipgram.h" // 假设头文件名
 3
 4typedef struct StringPack {
 5  long long len;
 6  char *data;
 7} StringPack;
 8
 9int main(int argc, char* argv[]) {
10    // 假设输入和工作空间已在私有内存中分配
11    StringPack* sentence = (StringPack*)0x10001000;
12    StringPack* words = (StringPack*)0x10002000;
13    StringPack** grams = (StringPack**)0x10003000;
14    int* grams_word_count = (int*)0x10004000;
15    int* stack = (int*)0x10005000;
16    char* output_tensor = (char*)0x10006000;
17    int* offset = (int*)0x10007000;
18    int* len = (int*)0x10008000;
19    int* shape = (int*)0x10009000;
20    char blank_char = ' ';
21
22    // 填充sentence内容
23    sentence->data = "mindspore signal processing library";
24    sentence->len = 33;
25
26    int ngram_size = 2;
27    int max_skip_size = 1;
28    int include_all_ngrams = 1;
29
30    skipgram_p(sentence, words, ngram_size, max_skip_size, include_all_ngrams,
31               grams, grams_word_count, stack, &blank_char,
32               output_tensor, offset, len, shape);
33    return 0;
34}